@file:Suppress("unused", "MemberVisibilityCanBePrivate")

package com.csw.android.dev_utils.ex

import java.io.File

/**
 * 文件扩展
 */
object FileEx {

    /**
     * 根据路径生成文件夹
     */
    fun String.generateDirectory() = File(this).apply {
        if (!exists()) {
            mkdirs()
        }
    }

    /**
     * 根据路径生成文件
     */
    fun String.generateFile() = File(this).apply { createFileIfNotExists() }

    /**
     * 为当前的file创建文件夹，
     * 若当前file路径是文件夹路径，请使用[File.mkdirs]
     */
    fun File.mkParentDirs() {
        val p = absolutePath
        val parentEnd = p.lastIndexOf(File.separator)
        if (parentEnd != -1) {
            val parentFile = File(p.substring(0, parentEnd))
            if (!parentFile.exists()) {
                parentFile.mkdirs()
            }
        }
    }

    /**
     * 如果文件不存在，则创建。文件存在则保持原样
     */
    fun File.createFileIfNotExists() = this.run {
        if (!exists()) {
            mkParentDirs()
            createNewFile()
        }
    }

    /**
     * 重新创建文件
     */
    fun File.recreate() {
        mkParentDirs()
        if (exists()) {
            delete()
        }
        createNewFile()
    }

    /**
     * 删除目录下所有文件
     */
    fun File.deleteSubFiles() {
        if (isDirectory && exists()) {
            listFiles()?.forEach {
                it?.deepDelete()
            }
        }
    }

    /**
     * 深度删除，将文件及其子文件都删除
     */
    fun File.deepDelete() {
        if (exists()) {
            if (isDirectory) {
                listFiles()?.forEach {
                    it?.deepDelete()
                }
            }
            delete()
        }
    }
}